package risesoft.data.transfer.core.exception;

/**
 * 标记运行的异常
 * 
 * @typeName FrameworkErrorCode
 * @date 2023年12月11日
 * @author lb
 */
public enum FrameworkErrorCode implements ErrorCode {

	INSTALL_ERROR("Framework-00", "DataTansfer引擎安装错误, 请联系您的运维解决 ."),
	ARGUMENT_ERROR("Framework-01", "DataTansfer引擎运行错误，该问题通常是由于内部编程错误引起，请联系DataTansfer开发团队解决 ."),
	RUNTIME_ERROR("Framework-02", "DataTansfer引擎运行过程出错，具体原因请参看DataTansfer运行结束时的错误诊断信息  ."),
	CONFIG_ERROR("Framework-03", "DataTansfer引擎配置错误，该问题通常是由于DataTansfer安装错误引起，请联系您的运维解决 ."),
	SECRET_ERROR("Framework-04", "DataTansfer引擎加解密出错，该问题通常是由于DataTansfer密钥配置错误引起，请联系您的运维解决 ."),
	HOOK_LOAD_ERROR("Framework-05", "加载外部Hook出现错误，通常是由于DataTansfer安装引起的"),
	HOOK_FAIL_ERROR("Framework-06", "执行外部Hook出现错误"),

	PLUGIN_INSTALL_ERROR("Framework-10", "DataTansfer插件安装错误, 该问题通常是由于DataTansfer安装错误引起，请联系您的运维解决 ."),
	PLUGIN_NOT_FOUND("Framework-11", "DataTansfer插件配置错误, 该问题通常是由于DataTansfer安装错误引起，请联系您的运维解决 ."),
	PLUGIN_INIT_ERROR("Framework-12", "DataTansfer插件初始化错误, 该问题通常是由于DataTansfer安装错误引起，请联系您的运维解决 ."),
	PLUGIN_RUNTIME_ERROR("Framework-13", "DataTansfer插件运行时出错, 具体原因请参看DataTansfer运行结束时的错误诊断信息 ."),
	PLUGIN_DIRTY_DATA_LIMIT_EXCEED("Framework-14",
			"DataTansfer传输脏数据超过用户预期，该错误通常是由于源端数据存在较多业务脏数据导致，请仔细检查DataTansfer汇报的脏数据日志信息, 或者您可以适当调大脏数据阈值 ."),
	PLUGIN_SPLIT_ERROR("Framework-15", "DataTansfer插件切分出错, 该问题通常是由于DataTansfer各个插件编程错误引起，请联系DataTansfer开发团队解决"),
	KILL_JOB_TIMEOUT_ERROR("Framework-16", "kill 任务超时，请联系PE解决"),
	START_TASKGROUP_ERROR("Framework-17", "taskGroup启动失败,请联系DataTansfer开发团队解决"),
	CALL_DATAX_SERVICE_FAILED("Framework-18", "请求 DataTansfer Service 出错."),
	CALL_REMOTE_FAILED("Framework-19", "远程调用失败"), KILLED_EXIT_VALUE("Framework-143", "Job 收到了 Kill 命令.");

	private final String code;

	private final String description;

	private FrameworkErrorCode(String code, String description) {
		this.code = code;
		this.description = description;
	}

	@Override
	public String getCode() {
		return this.code;
	}

	@Override
	public String getDescription() {
		return this.description;
	}

	@Override
	public String toString() {
		return String.format("Code:[%s], Description:[%s]. ", this.code, this.description);
	}

	/**
	 * 通过 "Framework-143" 来标示 任务是 Killed 状态
	 */
	public int toExitValue() {
		if (this == FrameworkErrorCode.KILLED_EXIT_VALUE) {
			return 143;
		} else {
			return 1;
		}
	}

}
